package org.example.service;

import org.example.entity.Permission;
import org.example.entity.Role;
import org.example.common.result.PageResult;

import java.util.List;
import java.util.Map;

/**
 * 角色服务接口
 */
public interface RoleService {
    
    // ========== 平台端角色管理方法 ==========
    
    /**
     * 分页查询平台角色列表
     */
    PageResult<Role> getPlatformRoleList(Integer page, Integer size, String roleName);
    
    /**
     * 根据ID查询平台角色详情
     */
    Role getPlatformRoleById(Long roleId);
    
    /**
     * 创建新平台角色
     */
    Role createPlatformRole(Role role);
    
    /**
     * 更新平台角色信息
     */
    Role updatePlatformRole(Role role);
    
    /**
     * 删除平台角色
     */
    void deletePlatformRole(Long roleId);
    
    /**
     * 为平台角色分配权限
     */
    void assignPlatformRolePermissions(Long roleId, List<Long> permissionIds);
    
    /**
     * 更新平台角色状态
     */
    void updatePlatformRoleStatus(Long roleId, Integer isActive);
    
    /**
     * 获取所有平台权限列表（用于权限分配）
     */
    List<Permission> getPlatformPermissions();
    
    /**
     * 根据角色ID获取其拥有的所有权限
     */
    List<Permission> getPermissionsByRoleId(Long roleId);
    
    /**
     * 统计每个角色下的用户数量（从users.primary_role_id统计）
     */
    List<Map<String, Object>> countUsersByRoleId();
    
    // ========== 企业端角色管理方法 ==========
    
    /**
     * 获取企业角色列表
     */
    List<Role> getEnterpriseRoleList(Long companyId);
    
    /**
     * 创建企业角色
     */
    Role save(Role role);
    
    /**
     * 根据ID获取角色
     */
    Role getById(Long roleId);
    
    /**
     * 更新角色
     */
    Role updateById(Role role);
    
    /**
     * 删除角色
     */
    boolean removeById(Long roleId);
    
    /**
     * 软删除角色（设置is_active=0）
     */
    boolean softRemoveById(Long roleId);
    
    /**
     * 恢复软删除的角色
     */
    boolean restoreRole(Long roleId);
    
    /**
     * 获取已删除的角色列表
     */
    List<Role> getDeletedRoles();
    
    /**
     * 为角色分配权限
     */
    void assignRolePermissions(Long roleId, List<Long> permissionIds);
    
    /**
     * 删除角色的所有权限关联
     */
    void removeRolePermissions(Long roleId);
    
    /**
     * 获取企业权限列表
     */
    List<Permission> getEnterprisePermissions();
    
    /**
     * 获取企业的默认角色
     */
    Role getDefaultRole(Long companyId);
    
    /**
     * 获取平台端的默认角色
     */
    Role getDefaultPlatformRole();
}



